#创建和使用字典
# dict()函数
items = [('name','Gumby'),('age',42)]
d = dict(items)
print(d)
print(len(d))
print(d['name'])
#成员资格
print('name' in d)
#修改/设置值
d['name']='Amy'
print(d)

# 人名电话
people = {
	'Alice':{
		'phone':'2222',
		'addr':'Fooo drive 23'
	},
	'Rachel':{
		'phone':'9102',
		'addr':'Bar Street 20'
	}
}

print(people['Alice'])
phonebook = {'Beth':'91022','Alice':'14444','Rachel':'22234'}
# ??字典的格式化字符串
print(("Rachel's phone number is %(Rachel)s.") % phonebook)


# 字典方法
# 1.clear()
# 2.copy()
phonebook2 = phonebook.copy()
phonebook2['Beth'] = '12456'
# 3.fromkeys()：使用给定的键建立新的字典，每个键默认对应的值为None
dictA = {}.fromkeys(['name','age'])
dictB = dict.fromkeys(['name','age'])
print("dictA:",dictA)
print("dictB:",dictB)

# 4.get()：访问不存在的key时，没有任何异常，得到None值
d = {}
# print(d['name'])  #访问不存在的key会报错
print(d.get('name')) #返回None

# 5.has_key(): d.has_key(k) 相当于表达式 k in d 
# print(d.has_key('name')) # python3.0不适用

# 6.items()/iteritems()
# items()将返回的字典项以列表的方式返回，列表的每一项都来自键值
item = phonebook.items()
print(item)

# it = d.iteritems() #有错待完善
# print(it)

# 7. keys()和iterkeys()：将字典中的键以列表形式返回
print('keys---------')
print(phonebook.keys())

# 8. pop():返回特定的值，并将该键值对从字典中移除
print(phonebook.pop('Alice'))
print(phonebook)

# 9. popitem():弹出随机的项
print(phonebook.popitem())
print(phonebook.popitem())
print(phonebook)

# 10. setdefault():当键不存在的时候，返回默认值并相应地更新字典。
# 如果键存在，那么久返回与其相应的值，不会改变字典
d = {}
d.setdefault('name','N/A')
print(d)
d['name'] ='Amy'
d.setdefault('name','N/A')
print(d)

# 11.update():利用一个字典项更新另一个字典，有则更新，无则新增
d = {'title':'Python Web Site','url':'http://www.python.org'}
x = {'title':'Python Language Site','test':'hello'}
d.update(x)
print(d)

# 12.values()和itervalues()
phonebook = {'Beth':'91022','Alice':'14444','Rachel':'22234'}
print(phonebook.values())

